package main

import "fmt"

func main() {

	// go 的 map 是一个 hash map 是无序的

	// 创建 map
	// m1 := map[string]string{
	// 	"name":   "hhy",
	// 	"course": "golang",
	// 	"site":   "langyamu",
	// }

	// fm := map[string]map[string]string{
	// 	"k1": {
	// 		"k2": "kkk",
	// 	},
	// }
	// var fm1 = map[string]map[string]string{
	// 	"k1": {
	// 		"k2": "kkk",
	// 	},
	// }
	// fmt.Println("fm::", fm, fm1)

	// m2 := make(map[string]int) // empty map
	// var m3 map[string]string   // nil

	m := map[string]map[string]string{
		"key1": {
			"key1-1": "key1-1",
			"key1-2": "key1-2",
		},
		"key2": {
			"key2-1": "key2-1",
			"key2-2": "key2-2",
		},
	}

	for _, v1 := range m {
		for k2, v2 := range v1 {
			fmt.Println("key", k2)
			fmt.Println("value", v2)
		}
	}

	// fmt.Println("m2 , m3 ",m2, m3)
	// fmt.Println("m1 = ", m1)
	// fmt.Println("m2= ", m2)
	// fmt.Println("m3= ", m3)

	// 遍历

	// for k, v := range m1 {
	// 	fmt.Println(k, v)
	// }

	// 访问元素
	//courseName := m1["course"]
	//fmt.Println(courseName)
	//	访问不存在的元素 不报错
	// fmt.Println(m1["abv"]) // 打印一个 zero value

	//	判断元素是否存在于 map中
	//courseName, ok := m1["course"]
	//abv, isOk := m1["abv"]
	//fmt.Println(courseName, ok)
	//fmt.Println(abv, isOk)

	//if causeName, ok := m1["cause"]; ok {
	//	fmt.Println(causeName, ok)
	//} else {
	//	fmt.Println("key does not exist")
	//}

	//	删除元素
	// name, ok := m1["name"]
	// fmt.Println(name, ok)
	// delete(m1, "name")
	// name, ok = m1["name"]
	// fmt.Println(name, ok)

	//map 的 key
	//	map 使用 哈希表，必须可以比较相等
	//	除了 slice map function的内建类型 都可以作为 key
	// Struct 类型 不包括 slice map function的内建类型 都可以作为 key
}
